package com.momo.mapper.mapper.sysSetting;

import com.momo.mapper.dataobject.RoleAclDO;
import com.momo.mapper.dataobject.RoleDO;
import com.momo.mapper.dataobject.RoleUserDO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by MOMO on 2019/3/22.
 */
public interface RoleMapper {

    int insertSelective(RoleDO record);

    int updateByPrimaryKeySelective(RoleDO record);

    /**
     * 校验角色名称是否唯一
     *
     * @param roleName 角色名称
     * @param groupId  组id
     * @param id       主键
     * @return
     */
    int checkRoleRepetition(@Param("roleName") String roleName, @Param("groupId") Long groupId, @Param("id") Long id);

    /**
     * 查询某个企业下的所有角色
     *
     * @param groupId
     * @return
     */
    List<RoleDO> getAllByGroupId(@Param("groupId") Long groupId);

    /**
     * 根据组织id  角色分页
     *
     * @return
     */
    List<RoleDO> rolePage(RoleDO roleDO);

    /**
     * uuid查询角色
     *
     * @param uuid
     * @return
     */
    RoleDO uuid(@Param("uuid") String uuid);

    /**
     * 校验第三方管理员只允许有一个
     *
     * @param groupId
     * @param id
     * @return
     */
    int checkAdminVipOne(@Param("groupId") Long groupId, @Param("id") Long id, @Param("roleType") String roleType);

    /**
     * 批量新增用户和角色关系
     *
     * @param roleUserDO
     * @return
     */
    int batchInsertUserRoles(@Param("roleUsers") List<RoleUserDO> roleUserDO);

    /**
     * 批量新增角色和用户关系
     *
     * @param roleUserDO
     * @return
     */
    int batchInsertRoleAcls(@Param("roleAcls") List<RoleAclDO> roleUserDO);

    /**
     * 删除用户和角色关系
     *
     * @param userId
     * @return
     */
    int deleteUserRolesByUserId(@Param("userId") Long userId);

    /**
     * 删除角色和权限点的关系
     *
     * @param roleId
     * @return
     */
    int deleteRoleAclsByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据组织id 和管理员角色 查询第三方组织的管理员信息
     *
     * @param groupId
     * @param roleType 角色的类型，0：管理员角色，1：普通用户 2其他
     * @return
     */
    RoleDO getVipAdminRole(@Param("groupId") Long groupId, @Param("roleType") String roleType);

    /**
     * 根据用户id 查询角色信息
     *
     * @param userId 用户id
     * @return
     */
    List<RoleDO> getRolesByUserId(@Param("userId") Long userId);

}
